package Queue

//队列
type MyQueue interface {
	Size() int                //队列大小
	IsEmpty() bool            // 是否为空
	Front() interface{}       //第一个值
	End() interface{}         //最后一个值
	EnQueue(data interface{}) //加入队列
	DeQuue() interface{}      //出队列
	Clear()                   //清空
}

type Queue struct {
	dataSoure []interface{} //队列数据
	thisSize  int
}

func NewQueue() *Queue {
	queue := new(Queue)
	queue.dataSoure = make([]interface{}, 0)
	queue.thisSize = 0
	return queue
}

//队列大小
func (myq *Queue) Size() int {
	return myq.thisSize
}

// 是否为空
func (myq *Queue) IsEmpty() bool {
	return myq.thisSize == 0
}

//第一个值
func (myq *Queue) Front() interface{} {
	if myq.thisSize == 0 {
		return nil

	}
	return myq.dataSoure[0]
}

//最后一个值
func (myq *Queue) End() interface{} {
	if myq.thisSize == 0 {
		return nil

	}
	return myq.dataSoure[myq.thisSize-1]
}

//加入队列
func (myq *Queue) EnQueue(data interface{}) {

	myq.dataSoure = append(myq.dataSoure, data)

	myq.thisSize++
}

//出队列
func (myq *Queue) DeQuue() interface{} {
	if myq.thisSize == 0 {
		return nil
	}
	data := myq.dataSoure[0]
	if myq.Size() > 1 {
		myq.dataSoure = myq.dataSoure[1:myq.Size()]
	} else {
		myq.dataSoure = make([]interface{}, 0)
	}
	myq.thisSize--
	return data
}

//清空
func (myq *Queue) Clear() {

}
